iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

ArasPLM開發分享系列 第 29

[Day29]在MVC中利用ViewModel將Model的兩個資料表合併為自訂資料表

  • 分享至 

  • xImage
  •  

今天要介紹的是如何在MVC中利用ViewModel將Model的兩個資料表合併為自訂資料表,當我們利用Model將資料庫的資料表引入MVC時,若是想要把兩個資料表各自做篩選並合併為自訂的資料表時,這時候就能利用ViewModel的方式完成這個功能

Model

  1. 首先先到Model的.edmx當中可以看到有兩個有關聯的資料表加入進來,若是想了解如何從資料庫將資料表加入Model中的朋友可以看 (https://ithelp.ithome.com.tw/articles/10215065) 的介紹

ViewModel

  1. 接下來去新增一個Class,建立想要自訂資料表的Property,完成ViewMoel的建立
public class ParentViewModel
{
    public string sITEM_NUMBER { get; set; }
    public string rITEM_NUMBER { get; set; }
    public string SOURCE_ID { get; set; }
    public string RELATED_ID { get; set; }
    public string STATE { get; set; }
    public string pMAJOR_REV { get; set; }
    public string sMAJOR_REV { get; set; }
    public string pGENERATION { get; set; }
    public string sGENERATION { get; set; }
}

Controller

  1. 接下來回到Controller的部分,首先先到全域的區域建立Model,得以在Controller中取得Model中資料表的資料

  2. 這邊的範例為延續昨天的LinqKit自訂查詢資料表where_CAD_STRUCTURE以及結合db.CAD兩個資料表,接著在select new剛剛建立的ParentViewModel,將兩個資料表結合並寫入ViewModel當中,若想了解如何利用LinqKit自訂查詢的朋友可以看 (https://ithelp.ithome.com.tw/articles/10225284) 的介紹

IEnumerable<ParentViewModel> parentModel =
(
    from cad_str in where_CAD_STRUCTURE
    join source_cad in db.CAD on cad_str.SOURCE_ID equals source_cad.ID
    join related_cad in db.CAD on cad_str.RELATED_ID equals related_cad.ID
    where source_cad.IS_CURRENT == "1"
    orderby related_cad.ITEM_NUMBER, source_cad.ITEM_NUMBER
               
    select new ParentViewModel
    {
        sITEM_NUMBER = source_cad.ITEM_NUMBER,
        rITEM_NUMBER = related_cad.ITEM_NUMBER,
        SOURCE_ID = cad_str.SOURCE_ID,
        RELATED_ID = cad_str.RELATED_ID,
        STATE = source_cad.STATE,
        pMAJOR_REV = source_cad.MAJOR_REV,
        sMAJOR_REV = related_cad.MAJOR_REV,
        pGENERATION = source_cad.GENERATION.ToString(),
        sGENERATION = related_cad.GENERATION.ToString()
    }
);

return View(parentModel);

View

  1. 接下來是View的部分,首先先在上方將剛剛建立的ParentViewModel宣告為IEnumerable資料集
@model IEnumerable<TLTC_CADChange.Library.ParentViewModel>
  1. 最後再利用迴圈foreach將資料集Model中的每筆資料查詢出來,再利用linq的方式寫入前端的Table當中,能夠依照資料量動態的新增出相對應的Table數量,完成顯示ViewModel自訂資料表的功能
<table class="table table-bordered table-striped">

    <thead>
        <tr style="background-color: #cdcdcd;">
            <th>
                共用鍵 @ViewBag.son 的 @ViewBag.level 父階圖號
            </th>
            <th>
                子階圖號
            </th>
            <th>
                狀態
            </th>
            <th>
                版本
            </th>
        </tr>
    </thead>

    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.sITEM_NUMBER)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.rITEM_NUMBER)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.STATE)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.pMAJOR_REV)
                </td>
            </tr>
        }
    </tbody>

</table>

上一篇
[Day28]使用C#的LINQKit來完成SQL資料庫的自訂查詢
下一篇
[Day30]在MVC的View當中利用.submit()簡化在Form表單送往Controller的動作
系列文
ArasPLM開發分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言